X-Git-Url: https://git.r.bdr.sh/rbdr/Flat-Bezel.qsplugin/blobdiff_plain/fc2c05420021064af5e322f5e59cf0995239349a..953623b990fb65a0a9676071022ae8ce50436d53:/Flat%20Bezel/FlatBezelObjectCell.swift diff --git a/Flat Bezel/FlatBezelObjectCell.swift b/Flat Bezel/FlatBezelObjectCell.swift new file mode 100644 index 0000000..211f332 --- /dev/null +++ b/Flat Bezel/FlatBezelObjectCell.swift @@ -0,0 +1,133 @@ +// +// FlatBezelObjectCell.swift +// Flat Bezel +// +// Created by Ruben Beltran del Rio on 2/8/23. +// Copyright © 2023 BRNBW. All rights reserved. +// +/* +import Foundation +import Cocoa + +class FlatBezelObjectCell: QSObjectCell { + let preferredImagePosition: NSControl.ImagePosition = .imageAbove + + override func draw(withFrame cellFrame: NSRect, in controlView: NSView!) { + let isFirstResponder = controlView.window?.firstResponder == controlView && !controlView.isKind(of: NSTableView.self) + + let dropTarget = self.isHighlighted && self.highlightsBy.contains(NSCell.StyleMask.changeBackgroundCellMask) && !self.isBezeled + + var fillColor: NSColor = self.backgroundColor ?? .textBackgroundColor + if (isFirstResponder) { + fillColor = self.highlightColor() + } + if (dropTarget) { + fillColor = NSColor(red: 0.77, green: 0.91, blue: 0.96, alpha: 1) + } + + var strokeColor: NSColor = .clear + + fillColor.setFill() + strokeColor.setStroke() + + let roundRect = NSBezierPath() + roundRect.appendRoundedRect(cellFrame, xRadius: cellRadiusFactor(), yRadius: cellRadiusFactor()) + roundRect.fill() + + self.drawInterior(withFrame: self.drawingRect(forBounds: cellFrame), in: controlView) + } + + override func titleRect(forBounds rect: NSRect) -> NSRect { + super.titleRect(forBounds: rect.offsetBy(dx: 0, dy: -4)) + } + + override func drawText(for drawObject: QSObject!, withFrame cellFrame: NSRect, in controlView: NSView!) { + if self.imagePosition == .imageOnly { + return; + } + + var abbrString: String? = nil + if controlView.responds(to: #selector(QSSearchObjectView.matchedString)) { + abbrString = (controlView as! QSSearchObjectView).matchedString() + } + + var nameString: String? = drawObject.displayName() + var hitMask: AutoreleasingUnsafeMutablePointer? = nil + + var ranker = drawObject.ranker() + if let ranker, let abbrString { + nameString = ranker.matchedString(forAbbreviation: abbrString, hitmask: hitMask, inContext: nil) + } + + var rankedStringIsName = nameString == drawObject.displayName() + if nameString == nil { + nameString = drawObject.identifier() ?? "Unknown" + } + + var useAlternateColor = false + if let controlView = controlView as? NSTableView { + useAlternateColor = controlView.isRowSelected(controlView.row(at: cellFrame.origin)) + } + + var mainColor: NSColor? = textColor() + if mainColor == nil { + mainColor = useAlternateColor ? .alternateSelectedControlTextColor : .controlTextColor + } + + var fadedColor = mainColor!.withAlphaComponent(0.50) + var textDrawRect = titleRect(forBounds: cellFrame) + + var titleString = NSMutableAttributedString(string: nameString!) + titleString.setAttributes(rankedStringIsName ? nameAttributes : detailAttributes, range: NSMakeRange(0, titleString.length)) + + if abbrString != nil && abbrString!.hasPrefix("QSActionMnemonic") { + titleString.addAttribute(.foregroundColor, value: rankedStringIsName ? fadedColor : fadedColor.withAlphaComponent(0.8), range: NSMakeRange(0, titleString.length)) + } else { + var i = 0 + var j = 0 + var hits: [Int] = [] + count = hitMask?. + } + } +} + + + NSUInteger i = 0; + NSUInteger j = 0; + NSUInteger hits[[titleString length]]; + NSUInteger count = [hitMask getIndexes:(NSUInteger *)&hits maxCount:[titleString length] inIndexRange:nil]; + NSDictionary *attributes = @{ + NSForegroundColorAttributeName: rankedStringIsName ? mainColor : fadedColor + }; + for(i = 0; i